package Fiad;

import java.util.List;

import valueobjects.Ausbilder.Ausbilder;
import valueobjects.Azubi.Azubi;
import valueobjects.Azubi_Kurs.Azubi_Kurs;
import valueobjects.Betrieb.Betrieb;
import valueobjects.Bewertung.Bewertung;
import valueobjects.Fach.Fach;
import valueobjects.Klasse.Klasse;
import valueobjects.Kurs.Kurs;
import valueobjects.Lehrer.Lehrer;
import valueobjects.Zeugnis.Zeugnis;

/**
 * Verwaltungsklasse.
 * 
 * @author Kevin
 * 
 */
public interface FIAD {

	/**
	 * Holt alle Daten.
	 */
	void holeAlleDaten();

	/**
	 * Holt alle {@link Lehrer} aus der Datenbank und speichert die Objekte in
	 * einer Liste.
	 * 
	 * @return Liste von {@link Lehrer Lehrern}
	 */
	List<Lehrer> holeAlleLehrer();

	/**
	 * Holt alle {@link Zeugnis} aus der Datenbank und speichert die Objekte in
	 * einer Liste.
	 * 
	 * @return Liste von {@link Zeugnis Zeugnissen}
	 */
	List<Zeugnis> holeAlleZeugnisse();

	/**
	 * Holt alle {@link Azubi Azubis} aus der Datenbank und speichert die
	 * Objekte in einer Liste.
	 * 
	 * @return Liste von {@link Azubi Azubis}
	 */
	List<Azubi> holeAlleAzubis();

	/**
	 * Holt alle {@link Betrieb Betriebe}aus der Datenbank und speichert die
	 * Objekte in einer Liste.
	 * 
	 * @return Liste von {@link Betrieb Betrieben}
	 */
	List<Betrieb> holeAlleBetriebe();

	/**
	 * Holt alle {@link Klasse Klassen} aus der Datenbank und speichert die
	 * Objekte in einer Liste.
	 * 
	 * @return Liste von {@link Klasse Klassen}
	 */
	List<Klasse> holeAlleKlassen();

	/**
	 * Testmethode zum Pr�fen der G�ltigkeit aller Objekte.
	 */
	void gibDatenAus();

	/**
	 * Holt alle {@link Ausbilder Ausbilder} aus der Datenbank und speichert die
	 * Objekte in einer Liste.
	 * 
	 * @return Liste von {@link Ausbilder Ausbildern}
	 */
	List<Ausbilder> holeAlleAusbilder();

	/**
	 * Holt alle {@link Fach F�cher} aus der Datenbank und speichert die Objekte
	 * in einer Liste.
	 * 
	 * @return Liste von {@link Fach F�chern}
	 */
	List<Fach> holeAlleFaecher();

	/**
	 * Speichert ein Zeugnis in der Datenbank.
	 */
	void speichereZeugnis(Zeugnis zeugnis);

	/**
	 * Aendert einen vorhandenen zeugnissatz in der Datenbank.
	 * 
	 * @param zeugnis
	 *            geaendertes zeugnis
	 */
	void aendereZeugnis(Zeugnis zeugnis);

	/**
	 * Löscht einen vorhanden Zeugnissatz aus der Datenbank.
	 * 
	 * @param zeugnis
	 *            zu löschendes Zeugnis
	 */
	void loescheZeugnis(Zeugnis zeugnis);

	/**
	 * Speichert einen Azubi in der Datenbank.
	 * 
	 * @param azubi
	 *            zu speichernder Azubi
	 */
	void speichereAzubi(Azubi azubi);

	/**
	 * Aendert einen vorhandenen Azubi in der Datenbank.
	 * 
	 * @param azubi
	 *            zu aendernder Azubi
	 */
	void aendereAzubi(Azubi azubi);

	/**
	 * Löscht einen Azubi aus der Datenbank.
	 * 
	 * @param azubi
	 *            zu löschender Azubi
	 */
	void loescheAzubi(Azubi azubi);

	/**
	 * Speichert einen Betrieb in der Datenbank.
	 * 
	 * @param betrieb
	 *            zu speichernder betrieb
	 */
	void speichereBetrieb(Betrieb betrieb);

	/**
	 * Aendert einen vorhandenen Betrieb in der Datenbank.
	 * 
	 * @param betrieb
	 *            zu aendernder Betrieb
	 */
	void aendereBetrieb(Betrieb betrieb);

	/**
	 * Loescht einen Betrieb in der Datenbank.
	 * 
	 * @param betrieb
	 *            zu loeschender Betrieb
	 */
	void loescheBetrieb(Betrieb betrieb);

	/**
	 * Speichert einen Ausbilder in der Datenbank.
	 * 
	 * @param ausbilder
	 *            zu speichernder Ausbilder
	 */
	void speichereAusbilder(Ausbilder ausbilder);

	/**
	 * Aendert einen Ausbilder in der Datenbank.
	 * 
	 * @param ausbilder
	 *            zu aendernder Ausbilder
	 */
	void aendereAusbilder(Ausbilder ausbilder);

	/**
	 * Löscht einen Ausbilder aus der Datenbank.
	 * 
	 * @param ausbilder
	 *            zu loeschender Ausbilder
	 */
	void loescheAusbilder(Ausbilder ausbilder);

	/**
	 * Holt alle Bewertungen aus der Datenbank.
	 */
	void holeAlleBewertungen();

	/**
	 * Holt alle Azubi_Kurse aus der Datenbank.
	 */
	List<Azubi_Kurs> holeAlleAzubi_Kurs();

	/**
	 * Spreichert die Azubi_Kurse in die Datenbank.
	 */
	void speichereAzubi_Kurs(Azubi_Kurs azubi_Kurs);

	/**
	 * Schreibt Änderungen der Azubi_Kurse in die Datenbank.
	 */
	void aendereAzubi_Kurs(Azubi_Kurs azubi_Kurs);

	/**
	 * holt alle Kurse aus der Datenbank.
	 */
	
	void holeAlleKurse();


	/**
	 * Berechnet einen Vorschlag zur Endnote eines Faches.
	 * 
	 * @param azubi
	 * @param fach
	 */
	void berechneNote(Azubi azubi, Fach fach);

	// Getter
	List<Lehrer> getAlleLehrer();

	List<Zeugnis> getAlleZeugnisse();

	List<Betrieb> getAlleBetriebe();

	List<Ausbilder> getAlleAusbilder();

	List<Klasse> getAlleKlassen();

	List<Azubi> getAlleAzubis();

	List<Fach> getAlleFaecher();

	List<Kurs> getAlleKurse();

	List<Bewertung> getAlleBewertungen();

	List<Azubi_Kurs> getAlleAzubi_Kurse();

}
